1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect;
18
19 import com.google.common.annotations.GwtCompatible;
20 import com.google.common.collect.ImmutableMultimap.Builder;
21 import com.google.common.collect.testing.SampleElements;
22 import com.google.common.collect.testing.SampleElements.Unhashables;
23 import com.google.common.collect.testing.UnhashableObject;
24 import com.google.common.testing.EqualsTester;
25
26 import junit.framework.TestCase;
27
28 import java.util.Arrays;
29 import java.util.Map.Entry;
30
31
32
33
34
35
36 @GwtCompatible(emulated = true)
37 public class ImmutableMultimapTest extends TestCase {
38
39 public void testBuilder_withImmutableEntry() {
40 ImmutableMultimap<String, Integer> multimap = new Builder<String, Integer>()
41 .put(Maps.immutableEntry("one", 1))
42 .build();
43 assertEquals(Arrays.asList(1), multimap.get("one"));
44 }
45
46 public void testBuilder_withImmutableEntryAndNullContents() {
47 Builder<String, Integer> builder = new Builder<String, Integer>();
48 try {
49 builder.put(Maps.immutableEntry("one", (Integer) null));
50 fail();
51 } catch (NullPointerException expected) {
52 }
53 try {
54 builder.put(Maps.immutableEntry((String) null, 1));
55 fail();
56 } catch (NullPointerException expected) {
57 }
58 }
59
60 private static class StringHolder {
61 String string;
62 }
63
64 public void testBuilder_withMutableEntry() {
65 ImmutableMultimap.Builder<String, Integer> builder =
66 new Builder<String, Integer>();
67 final StringHolder holder = new StringHolder();
68 holder.string = "one";
69 Entry<String, Integer> entry = new AbstractMapEntry<String, Integer>() {
70 @Override public String getKey() {
71 return holder.string;
72 }
73 @Override public Integer getValue() {
74 return 1;
75 }
76 };
77
78 builder.put(entry);
79 holder.string = "two";
80 assertEquals(Arrays.asList(1), builder.build().get("one"));
81 }
82
83
84
85 public void testCopyOf() {
86 ImmutableSetMultimap<String, String> setMultimap
87 = ImmutableSetMultimap.of("k1", "v1");
88 ImmutableMultimap<String, String> setMultimapCopy
89 = ImmutableMultimap.copyOf(setMultimap);
90 assertSame("copyOf(ImmutableSetMultimap) should not create a new instance",
91 setMultimap, setMultimapCopy);
92
93 ImmutableListMultimap<String, String> listMultimap
94 = ImmutableListMultimap.of("k1", "v1");
95 ImmutableMultimap<String, String> listMultimapCopy
96 = ImmutableMultimap.copyOf(listMultimap);
97 assertSame("copyOf(ImmutableListMultimap) should not create a new instance",
98 listMultimap, listMultimapCopy);
99 }
100
101 public void testUnhashableSingletonValue() {
102 SampleElements<UnhashableObject> unhashables = new Unhashables();
103 Multimap<Integer, UnhashableObject> multimap = ImmutableMultimap.of(
104 0, unhashables.e0);
105 assertEquals(1, multimap.get(0).size());
106 assertTrue(multimap.get(0).contains(unhashables.e0));
107 }
108
109 public void testUnhashableMixedValues() {
110 SampleElements<UnhashableObject> unhashables = new Unhashables();
111 Multimap<Integer, Object> multimap = ImmutableMultimap.<Integer, Object>of(
112 0, unhashables.e0, 2, "hey you", 0, unhashables.e1);
113 assertEquals(2, multimap.get(0).size());
114 assertTrue(multimap.get(0).contains(unhashables.e0));
115 assertTrue(multimap.get(0).contains(unhashables.e1));
116 assertTrue(multimap.get(2).contains("hey you"));
117 }
118
119 public void testEquals() {
120 new EqualsTester()
121 .addEqualityGroup(ImmutableMultimap.of(), ImmutableMultimap.of())
122 .addEqualityGroup(ImmutableMultimap.of(1, "a"), ImmutableMultimap.of(1, "a"))
123 .addEqualityGroup(
124 ImmutableMultimap.of(1, "a", 2, "b"),
125 ImmutableMultimap.of(2, "b", 1, "a"))
126 .testEquals();
127 }
128 }
129